from sqlalchemy import create_engine, Float, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker, mapped_column, Mapped

# 基类
Base = declarative_base()

# 引擎
# engine = create_engine('sqlite:///test.db', echo=True)
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/ceba', echo=True)


# 测试用例表
class Testcase(Base):
    # 定义表名
    __tablename__ = 'testcase'

    # 定义表字段
    # 类型注解 映射为python中的类型
    # 用例编号
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    # 用例名称
    name: Mapped[str] = mapped_column(String(30))
    # URL地址
    url: Mapped[str] = mapped_column(String(100))
    # 请求方法
    method: Mapped[str] = mapped_column(String(10))
    # 请求参数
    params: Mapped[str] = mapped_column(String(100))
    # 请求体
    data: Mapped[str] = mapped_column(String(300))

    def as_dict(self):
        # 字典推倒式
        # 三种方式 attribute @dataclass 自带as_dict()
        info = {k: v for k, v in self.__dict__.items() if not k.startswith('_')}
        return info


# 测试任务表
class Task(Base):
    # 定义表名
    __tablename__ = 'task'

    # 定义表字段
    # 任务编号
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    # 任务名称
    name: Mapped[str] = mapped_column(String(30))
    # 成功数
    success: Mapped[int] = mapped_column(Integer)
    # 总数
    total: Mapped[int] = mapped_column(Integer)
    # 成功率 一般不设置为百分数 展示处理
    rate: Mapped[float] = mapped_column(Float)

    def as_dict(self):
        # 字典推倒式
        info = {k: v for k, v in self.__dict__.items() if not k.startswith('_')}
        return info

def init_db():
    Base.metadata.create_all(engine)
    # Base.metadata.drop_all(engine)


if __name__ == '__main__':
    init_db()
